/**
 * Created by Administrator on 2015/6/23 0023.
 */
/**
 * Created by mooshroom on 2015-06-12.
 * 版本：V3.0.0
 * 使用avalon组件模式重构
 */
define([
        //引入所依赖的文件
        "avalon",
        'text!../../ui/tEmoticon/tEmoticon.html',
        'css!../../ui/tEmoticon/tEmoticon.css'
    ],
    function (avalon, html) {
        var widget = avalon.ui.tEmoticon = function (element, data, vmodels) {
            var options = data.tEmoticonOptions//取得配置
            var objId = data.tEmoticonId//声明新生成组件的ID
            /**
             * 这里之所以要用"data.tipOptions"以及"data.tipId"，是因为我们这里定义的是："avalon.ui.tip"
             * 所以，如果我们定义的是"avalon.ui.xxx",那么这里就要使用data.xxxOptions和data.xxxId
             * 为什么？因为avalon给你把字符串拼接好了~要换一套规则，就去修改他源码吧
             */

            var vmodel = avalon.define({
                $id: objId,

                //使用$init可以让avalon自动在加载成功之后执行里面的方法
                $init: function () {
                    //填充DOM结构
                    element.innerHTML = html

                    //扫描新添加进来的DOM节点，一定要传第二个参数，否则有的东西扫描不到
                    avalon.scan(element, [vmodel].concat(vmodels))

                    /*
                     * 组件的$init方法里面,
                     * 在扫描后最好再调用一个onInit回调,传入当前组件的 vmodel, options, vmodels, this指向当前元素
                     * 这样用户就不需要定义组件的$id了
                     * (据说是这样，然而并没有感觉到什么卵用)
                     */
                    if (typeof vmodel.onInit === "function") {
                        vmodel.onInit.call(element, vmodel, options, vmodels)
                    }

                },

                //自爆~，自我销毁函数，在组件移除的时候自动调用这里面的方法
                $remove: function () {
                    element.innerHTML = ""

                },

                //并不知道有什么用，但是规范上面说要有这个方法（囧）
                onInit: function () {

                },

                /********以下是正常的组件的各个属性********/
                //整理颜文字库
                texts: [
                    "_(┐「ε:)_",
                    "_(:3 」∠)_",
                    "・゜・(PД`q｡)・゜・",
                    "ಠ౪ಠ ",
                    "ಥ_ಥ",
                    "(/≥▽≤/)",
                    "✪ω✪",
                    "*★,°*:.☆╮(￣▽￣)/$:*.°★*",
                    "ヾ (o ° ω ° O ) ノ゙",
                    "╰(*°▽°*)╯",
                    "o(*≧▽≦)ツ",
                    "≖‿≖✧",
                    ">ㅂ<",
                    "ˋ▽ˊ",
                    "╮(•ㅂ•)/♥",
                    "✪ε✪",
                    "✪υ✪",
                    " (╭￣3￣)╭♡",
                    "(☆ﾟ∀ﾟ)",
                    "ʅ（´◔౪◔）ʃ",
                    "o(*≧▽≦)ツ┏━┓拍桌狂笑",
                    "(｡・`ω´･) ",
                    ",,Ծ‸Ծ,,",
                    "(*ﾟ▽ﾟ*) ",
                    "(╯‵□′)╯︵┻━┻",
                    "(╬▔皿▔)",
                    "(｀･д･´)",
                    "(＃｀皿´)",
                    "（°ο°）",
                    "Σ( ° △ °|||)︴",
                    "∑(っ °Д °;)っ",
                    "(°□°；)",
                    "(⊙□⊙)",
                    "ミ ﾟДﾟ彡",
                    "╮(╯▽╰)╭",
                    "(￣▽￣'')",
                    "（￣工￣lll）",
                    "( ＿ ＿)ノ｜扶墙",
                    "ㄟ( ▔, ▔ )ㄏ",
                    "(*´Д｀*)",
//                    "滚来滚去……~(～o￣▽￣)～o 。。。滚来滚去……o～(＿△＿o～) ~。。。",
                    "(→_→)",
                    " (＞﹏＜) ",
                    "┏(゜ロ゜;)┛",
                    "(oﾟωﾟo)",
                    "(￣(●●)￣)",
                    "(＃°Д°)",
                    "(°◇°)",
                    "(>з<)",
                    "(~￣▽￣)~[]",
                    "(￣ε(#￣)☆╰╮o(￣皿￣/) ",
                    "------ㄟ(˙<>˙)/------",
                    "￣□￣｜｜",
                    "Σ(⊙▽⊙''a",
                    "(*^︹^*) ",
                    "(^３^)╱~~"
                ],
                //定义目标输入框id
                tgInput: '',
                target:{},
                //定义正在输入的文字
//                inputing: "",
                //插入颜文字
                insert: function (text) {
//                    vmodel.inputing=vmodel.target


                    //保存当前滚动高度
                    var textarea = document.getElementById(vmodel.tgInput);
                    var inputing=textarea.value
                    var sh = textarea.scrollTop
                    var start = textarea.selectionStart;//获取光标所在位置对应的文本节点
                    var end = textarea.selectionEnd;
                    var l = inputing.length;//获取整个文本总长度

                    //插入指定的东西
                    var t1 = inputing.slice(0, start);
//                    var t = MDEditor.md.slice(start, end);
                    var t2 = inputing.slice(end, l);

                    textarea.value = t1 + text + t2;

                    //文本域获取焦点并且选中制定的文本
                    textarea.focus();
                    textarea.setSelectionRange(start, end);

                    //滚回原来的高度
                    textarea.scrollTop = sh;

                    //执行编译
//                    MDEditor.trs();
//                    console.log()


                },

                //控制UI
                isShow:false,
                toggle:function(b){
                   vmodel.isShow=vmodel.isShow?false:true
                }


                /********以上是正常的组件的各个属性********/
            })

            //传入配置，传入方法就是把option里面的属性和刚才创建的VM里面的属性搅拌起来
            avalon.mix(vmodel, options)

            //最后把创建好的VM赋值给当前域下面的以VM的ID为名称的对象里面去，我们就能在当前域调用了
            return this[objId] = vmodel
        }

        //这是给默认配置的地方，在这里暂时还用不上
        widget.defaults = {}

        //传说一定要这样,不过我注释了也没有什么异常
        return avalon
    })